]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dnd: Identify pointing focus through Clutter.Sprite
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 26 May 2025 15:26:16 +0000 (17:26 +0200)
committerMarge Bot <marge-bot@gnome.org>
Thu, 28 Aug 2025 20:15:40 +0000 (20:15 +0000)
Move away from devices and sequences to identify these, and rely
on Clutter.Sprite.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3726>

js/ui/dnd.js

index 248ebfa53350c05d10061488d351ce7f93f8b81b..cfe8438ad089778206096718b6c9e8da0586dfff 100644 (file)
@@ -115,7 +115,7 @@ class _Draggable extends Signals.EventEmitter {
         this._dragCancellable = true;
     }
 
-    _grabEvents(device, touchSequence) {
+    _grabEvents(sprite) {
         const grab = Main.pushModal(_getEventHandlerActor());
         if ((grab.get_seat_state() & Clutter.GrabState.POINTER) === 0) {
             Main.popModal(grab);
@@ -123,15 +123,13 @@ class _Draggable extends Signals.EventEmitter {
         }
 
         this._grab = grab;
-        this._grabbedDevice = device;
-        this._grabbedEventSequence = touchSequence;
+        this._sprite = sprite;
     }
 
     _ungrabEvents() {
         Main.popModal(this._grab);
         this._grab = null;
-        this._grabbedDevice = null;
-        this._grabbedEventSequence = null;
+        this._sprite = null;
     }
 
     _gestureRecognized() {
@@ -140,13 +138,13 @@ class _Draggable extends Signals.EventEmitter {
 
         const triggeringEvent = this._dndGesture.get_drag_triggering_event();
         const [stageX, stageY] = triggeringEvent.get_coords();
-        const device = triggeringEvent.get_device();
-        const sequence = triggeringEvent.get_event_sequence();
+        const backend = this.actor.get_context().get_backend();
+        const sprite = backend.get_sprite(global.stage, triggeringEvent);
         const time = triggeringEvent.get_time();
 
         currentDraggable = this;
 
-        this._grabEvents(device, sequence);
+        this._grabEvents(sprite);
         if (!this._grab)
             return;
 
@@ -578,12 +576,9 @@ class _Draggable extends Signals.EventEmitter {
             return Clutter.EVENT_PROPAGATE;
         }
 
-        if (event.get_device() !== this._grabbedDevice)
-            return Clutter.EVENT_PROPAGATE;
-
-        const sequence = event.get_event_sequence();
-        if (this._grabbedEventSequence &&
-            sequence?.get_slot() !== this._grabbedEventSequence.get_slot())
+        const backend = actor.get_context().get_backend();
+        const sprite = backend.get_sprite(global.stage, event);
+        if (sprite !== this._sprite)
             return Clutter.EVENT_PROPAGATE;
 
         if (event.type() === Clutter.EventType.BUTTON_RELEASE ||